﻿using System;

// 接口，用于计算形状的面积
public interface IShape
{
    double CalculateArea();
}

// 抽象类，用于表示形状
public abstract class Shape
{
    // 方法，用于检查形状是否合法
    public abstract bool IsValid();
}

// 长方形类
public class Rectangle : Shape, IShape
{
    public double Length { get; set; }
    public double Width { get; set; }

    // 构造函数
    public Rectangle(double length, double width)
    {
        Length = length;
        Width = width;
    }

    // 实现接口方法，计算长方形的面积
    public double CalculateArea()
    {
        return Length * Width;
    }

    // 实现抽象方法，检查长方形是否合法
    public override bool IsValid()
    {
        return Length > 0 && Width > 0;
    }
}

// 正方形类
public class Square : Rectangle
{
    // 构造函数
    public Square(double sideLength) : base(sideLength, sideLength)
    {
    }
}

// 三角形类
public class Triangle : Shape, IShape
{
    public double Base { get; set; }
    public double Height { get; set; }

    // 构造函数
    public Triangle(double @base, double height)
    {
        Base = @base;
        Height = height;
    }

    // 实现接口方法，计算三角形的面积
    public double CalculateArea()
    {
        return 0.5 * Base * Height;
    }

    // 实现抽象方法，检查三角形是否合法
    public override bool IsValid()
    {
        return Base > 0 && Height > 0;
    }
}

class Program
{
    static void Main(string[] args)
    {
        // 创建一个长方形实例
        Rectangle rectangle = new Rectangle(5, 4);
        Console.WriteLine("长方形面积: " + rectangle.CalculateArea());
        Console.WriteLine("是否合法: " + rectangle.IsValid());

        // 创建一个正方形实例
        Square square = new Square(5);
        Console.WriteLine("正方形面积: " + square.CalculateArea());
        Console.WriteLine("是否合法: " + square.IsValid());

        // 创建一个三角形实例
        Triangle triangle = new Triangle(5, 4);
        Console.WriteLine("三角形面积: " + triangle.CalculateArea());
        Console.WriteLine("是否合法: " + triangle.IsValid());
    }
}
